#include<cstdio>//D
#include<cstring>

char M[30][30];
int n,m,set_x,set_y,ans;
bool visit[30][30];
int turn_x[5]={0,1,-1,0,0};
int turn_y[5]={0,0,0,-1,1};

void init()
{
	memset(visit,false,sizeof(visit));
	ans=0;
	return ;
}

void DFS(int x,int y)
{
	ans++;
	for(int i=1;i<=4;++i)
	{
		if(x+turn_x[i]<=0||x+turn_x[i]>m||y+turn_y[i]<=0||y+turn_y[i]>n)continue;

		if(visit[x+turn_x[i]][y+turn_y[i]]==false && M[x+turn_x[i]][y+turn_y[i]]=='.')
		{
			visit[x+turn_x[i]][y+turn_y[i]]=true;
			DFS(x+turn_x[i],y+turn_y[i]);
		}
	}
	return ;
}

int main()
{
	while(true)
	{
		init();
		scanf("%d%d\n",&n,&m);
		if(!n)break;
		for(int i=1;i<=m;++i)
		{
			for(int j=1;j<=n;++j)
			{
				scanf("%c",&M[i][j]);
				if(M[i][j]=='@')
				{
					set_x = i;
					set_y = j;
				}
			}
			scanf("\n");
		}
		visit[set_x][set_y]=true;
		DFS(set_x,set_y);
		printf("%d\n",ans);
	}
	return 0;
}
